package com.jc;

import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

public class PostgreSQLInsert {
    public static void main(String[] args) {
        String url = null;
        String user = null;
        String password = null;

        // SQL语句：仅插入name字段，使用1个占位符
        String sql_str = "INSERT INTO users (name) VALUES (?)";

        // 读取数据库配置
        try {
            InputStream is = PostgreSQLInsert.class.getResourceAsStream("/db.properties");
            if (is == null) {
                System.out.println("db.properties 未在类路径中找到");
                return;
            }
            Properties pros = new Properties();
            pros.load(is);
            url = pros.getProperty("url");
            user = pros.getProperty("user");
            password = pros.getProperty("password");

            System.out.println("URL: " + url);
            System.out.println("User: " + user);

        } catch (Exception e) {
            System.out.println("读取配置文件失败: " + e.getMessage());
            return;
        }

        // 数据库操作：使用try-with-resources自动关闭资源
        try (Connection conn = DriverManager.getConnection(url, user, password);
             PreparedStatement ps = conn.prepareStatement(sql_str)) {

            conn.setAutoCommit(false); // 开启事务

            // 第一个批次：参数索引为1（对应SQL中的第一个?）
            ps.setString(1, "tony"); // 正确使用索引1
            ps.addBatch();

            // 第二个批次：同样使用索引1
            ps.setString(1, "david"); // 正确使用索引1
            ps.addBatch();

            // 执行批量插入并提交事务
            int[] results = ps.executeBatch();
            conn.commit();
            System.out.println("插入数据成功！插入记录数: " + results.length);

        } catch (SQLException e) {
            System.out.println("插入数据失败: " + e.getMessage());
            e.printStackTrace();
            // 若发生异常，回滚事务（需在try外获取连接才能回滚，这里简化处理）
        }
    }
}